﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using FONCREAGROINTEGRAL.Models;
using Microsoft.Reporting.WebForms;

namespace FONCREAGROINTEGRAL.Controllers
{
    public class recordvacacionController : Controller
    {
        public SistIntFoncreagroEntities entidades = new SistIntFoncreagroEntities();
        //
        // GET: /recordvacacion/
        public ActionResult Indexvd()
        {
            //string personal = Convert.ToString(Request.QueryString["query"]);

           // int start = Convert.ToInt32(Request.QueryString["start"]);
           // int limit = Convert.ToInt32(Request.QueryString["limit"]);
            var filtrer = Convert.ToString(Request.QueryString["filter"]);
            string apnombres = Convert.ToString(Request.QueryString["query"]);
             
            var query = entidades.RVACACIONESPORDIAS(0).ToList();
            if (filtrer != null)
            {
                string parametro = filtrer.Remove(0, 30);
                char[] MyChar = { '\\', '"', '}', ']', '[', '}' };
                parametro = parametro.Trim(MyChar);
                apnombres = parametro;
            }

            if (apnombres != null)
            {
                var result = (from p in query.ToList()

                              where p.ApellidosNombres.ToUpper().Contains(apnombres.ToUpper())
                              select new
                              {
                                  ApellidosNombres = p.ApellidosNombres,
                                  FechaIngreso = string.Format("{0:d}", p.FechaIngreso),
                                  Anio = p.Anio,
                                  DiasGozados = p.DiasGozados,
                                  RecordVacaciones = p.RecordVacaciones,
                                  Enero = p.Enero,
                                  Febrero = p.Febrero,
                                  Marzo = p.Marzo,
                                  Abril = p.Abril,
                                  Mayo = p.Mayo,
                                  Junio = p.Junio,
                                  Julio = p.Julio,
                                  Agosto = p.Agosto,
                                  Setiembre = p.Setiembre,
                                  Octubre = p.Octubre,
                                  Noviembre = p.Noviembre,
                                  Diciembre = p.Diciembre,

                              }).ToList();

                return Json(new { grid = result, total = result.Count() }, JsonRequestBehavior.AllowGet);

            }

            else {


                var result = (from p in query.ToList()
                              select new
                              {
                                  ApellidosNombres = p.ApellidosNombres,
                                  FechaIngreso = string.Format("{0:d}", p.FechaIngreso),
                                  Anio = p.Anio,
                                  DiasGozados = p.DiasGozados,
                                  RecordVacaciones = p.RecordVacaciones,
                                  Enero = p.Enero,
                                  Febrero = p.Febrero,
                                  Marzo = p.Marzo,
                                  Abril = p.Abril,
                                  Mayo = p.Mayo,
                                  Junio = p.Junio,
                                  Julio = p.Julio,
                                  Agosto = p.Agosto,
                                  Setiembre = p.Setiembre,
                                  Octubre = p.Octubre,
                                  Noviembre = p.Noviembre,
                                  Diciembre = p.Diciembre,

                              }).ToList();

                return Json(new { grid = result, total = result.Count() }, JsonRequestBehavior.AllowGet);
            
            }

       }

        public ActionResult IndexvdTodos()
        {


          //  int start = Convert.ToInt32(Request.QueryString["start"]);
          //  int limit = Convert.ToInt32(Request.QueryString["limit"]);
            var filtrer = Convert.ToString(Request.QueryString["filter"]);
            string apnombres = Convert.ToString(Request.QueryString["query"]);

            var query = entidades.RVACACIONESPORDIAS(1).ToList();
            if (filtrer != null)
            {
                string parametro = filtrer.Remove(0, 30);
                char[] MyChar = { '\\', '"', '}', ']', '[', '}' };
                parametro = parametro.Trim(MyChar);
                apnombres = parametro;
            }

            if (apnombres != null)
            {
                var result = (from p in query.ToList()

                              where p.ApellidosNombres.ToUpper().Contains(apnombres.ToUpper())
                              select new
                              {
                                  ApellidosNombres = p.ApellidosNombres,
                                  FechaIngreso = string.Format("{0:d}", p.FechaIngreso),
                                  Anio = p.Anio,
                                  DiasGozados = p.DiasGozados,
                                  RecordVacaciones = p.RecordVacaciones,
                                  Enero = p.Enero,
                                  Febrero = p.Febrero,
                                  Marzo = p.Marzo,
                                  Abril = p.Abril,
                                  Mayo = p.Mayo,
                                  Junio = p.Junio,
                                  Julio = p.Julio,
                                  Agosto = p.Agosto,
                                  Setiembre = p.Setiembre,
                                  Octubre = p.Octubre,
                                  Noviembre = p.Noviembre,
                                  Diciembre = p.Diciembre,

                              }).ToList();

                return Json(new { grid = result, total = result.Count() }, JsonRequestBehavior.AllowGet);

            }

            else
            {


                var result = (from p in query.ToList()
                              select new
                              {
                                  ApellidosNombres = p.ApellidosNombres,
                                  FechaIngreso = string.Format("{0:d}", p.FechaIngreso),
                                  Anio = p.Anio,
                                  DiasGozados = p.DiasGozados,
                                  RecordVacaciones = p.RecordVacaciones,
                                  Enero = p.Enero,
                                  Febrero = p.Febrero,
                                  Marzo = p.Marzo,
                                  Abril = p.Abril,
                                  Mayo = p.Mayo,
                                  Junio = p.Junio,
                                  Julio = p.Julio,
                                  Agosto = p.Agosto,
                                  Setiembre = p.Setiembre,
                                  Octubre = p.Octubre,
                                  Noviembre = p.Noviembre,
                                  Diciembre = p.Diciembre,

                              }).ToList();

                return Json(new { grid = result, total = result.Count() }, JsonRequestBehavior.AllowGet);

            }
        }


        public ActionResult Index(int id)
        {
            int start = Convert.ToInt32(Request.QueryString["start"]);
            int limit = Convert.ToInt32(Request.QueryString["limit"]);

            //string area = Convert.ToString(Request.QueryString["query"]);

            var query = entidades.RECORDVACACIONs
                .Join(entidades.PERIODOLABORALs, rv => rv.IdPeriodoLaboral, pl => pl.IdPeriodoLaboral, (rv, pl) => new { rv.idrecordvacacion,
                rv.FechaInicio,rv.FechaFin,pl.IdPersonal,pl.Estado,rv.Monto})
                .Where(pl => pl.IdPersonal == id )
                .Where(pl => pl.Estado == true);
            /*if (!String.IsNullOrEmpty(area))
            {
                query = query.Where(a => (a.Nombre).ToUpper().Contains(area.ToUpper()));
            }*/
            var result = (from rv in query.OrderByDescending(rv => rv.idrecordvacacion).Skip(start).Take(limit).ToList()
                          //join mfp in entidades.MOTIVOFINDEPERIODOes on pl.IdMotivoFinDePeriodo equals mfp.IdMotivoFinDePeriodo
                          //join mfp in entidades.MOTIVOFINDEPERIODOes on pl.IdMotivoFinDePeriodo equals mfp.IdMotivoFinDePeriodo into lmfp
                          //from x in lmfp.DefaultIfEmpty()
                          select new
                          {
                              Id = rv.idrecordvacacion,
                              Fechainicio = string.Format("{0:d}", rv.FechaInicio),
                              Fechafin = string.Format("{0:d}", rv.FechaFin),
                              Dias = Convert.ToDateTime(rv.FechaFin).Subtract(Convert.ToDateTime(rv.FechaInicio)).Days+1,
                              Monto = rv.Monto
                              //Estado = rv.Estado,
                              //Motivofin = (x == null ? String.Empty : x.Descripcion),

                          }).ToList();

            return Json(new { grid = result, total = query.Count() }, JsonRequestBehavior.AllowGet);
        }

        //
        // GET: /recordvacacion/Details/5

        public ActionResult Details(int id)
        {
            return View();
        }

        //
        // GET: /recordvacacion/Create

        public ActionResult Create()
        {
            return View();
        } 

        //
        // POST: /recordvacacion/Create

        [HttpPost]
        public ActionResult Create(FormCollection collection, RECORDVACACION RECORDVACACION)
        {
            try
            {
                // TODO: Add insert logic here
                if (ModelState.IsValid)
                {

                    var crecordvacacion = new RECORDVACACION();
                    TryUpdateModel(crecordvacacion, collection.ToValueProvider());
                    entidades.AddToRECORDVACACIONs(crecordvacacion);
                    entidades.SaveChanges();

                    return Content("OK");
                }
                else
                {return View();}
            }
            catch
            {
                return View();
            }
        }
        
        //
        // GET: /recordvacacion/Edit/5
 
        public ActionResult Edit(int id)
        {
            var erecordvacacion = entidades.RECORDVACACIONs.Single(p => p.idrecordvacacion == id);
            return View(erecordvacacion);
        }

        //
        // POST: /recordvacacion/Edit/5

        [HttpPost]
        public ActionResult Edit(int id, FormCollection collection)
        {
            var erecordvacacion = entidades.RECORDVACACIONs.Single(p => p.idrecordvacacion == id);
            try
            {
                // TODO: Add update logic here
                if (ModelState.IsValid)
                {
                    TryUpdateModel(erecordvacacion);
                    entidades.SaveChanges();
                    return Content("OK");
                }

                return View(erecordvacacion); 
            }
            catch
            {
                return View(erecordvacacion);
            }
        }

        //
        // GET: /recordvacacion/Delete/5
 
        public ActionResult Delete(int id)
        {
            return View();
        }

        //
        // POST: /recordvacacion/Delete/5

        [HttpPost]
        public ActionResult Delete(int id, FormCollection collection)
        {
            try
            {
                // TODO: Add delete logic here
 
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }

        public ActionResult Reportdv()
        {

            LocalReport localReport = new LocalReport();
            localReport.ReportPath = Server.MapPath("~/Content/Reportes/Rvacpordias.rdlc");
          //  localReport.ReportPath = Server.MapPath("~/Content/Reportes/RVACACIONESPORDIAS.rdlc");
            ReportDataSource reportDataSource = new ReportDataSource("DataSet1", entidades.RHReporteVacacionesExcel(2012));
            localReport.DataSources.Add(reportDataSource);
            string reportType = "EXCEL";
            string mimeType = "application/vnd.ms-excel";
            string encoding;
            string fileNameExtension="xls";
            String deviceInfo="";
          /*  string deviceInfo =
             "<DeviceInfo>" +
          "  <OutputFormat>EXCEL</OutputFormat>" +
          "  <PageWidth>10in</PageWidth>" +
          "  <PageHeight>15in</PageHeight>" +
          "  <MarginTop>0in</MarginTop>" +
          "  <MarginLeft>0in</MarginLeft>" +
          "  <MarginRight>0in</MarginRight>" +
          "  <MarginBottom>0in</MarginBottom>" +
          "</DeviceInfo>";*/
            Warning[] warnings;
            string[] streams;
            byte[] renderedBytes;
            renderedBytes = localReport.Render(
                reportType,
                deviceInfo,
                out mimeType,
                out encoding,
                out fileNameExtension,
                out streams,
                out warnings);
            Response.Clear();
            Response.ContentType = mimeType;
            Response.AddHeader("content-disposition", "attachment; filename=RecordVacciones.xls");
            Response.BinaryWrite(renderedBytes);
            Response.End();
            return File(renderedBytes, mimeType);
        }
    }
}
